VC PlusPlus:DLLのデバッグRegsvr32登録して使うタイプの場合Windows10 64bit

提供:yonewiki

VC PlusPlusに戻る

概要

 Deskbandのdllのサンプル(https://docs.microsoft.com/en-us/samples/microsoft/windows-classic-samples/deskbands/)を入手したのですが、どうやってデバッグするかわかりませんでした。今回の場合はregsvr32から呼び出されるタイプだったのですが、その他のdll呼び出しメカニズムを使っている場合は、ここで紹介する例だけでは、対応できないです。アタッチがキーワードになると思います。


 まずは、dllを動作させる方法を知っているとして、呼び出し元がよくわからない場合はdllのプロジェクトのDllMain関数に以下のプログラムを追加すると良いでしょう。


 ヘッダ追加と名前空間の設定

#include <tlhelp32.h>
#include<iostream>
#include<fstream>
using namespace std;

 プログラム部

    WCHAR wcpBuff[256];
    WCHAR wcpGetModuleFileNameBuff[256];
    HMODULE hModule = NULL;

    std::wofstream outputfile2("test.txt", ios::trunc);
    outputfile2.close();
    
    std::wofstream outputfile("test.txt", ios::app);
    outputfile.imbue(std::locale("", LC_CTYPE));

    GetModuleFileName((HMODULE)hModule, wcpGetModuleFileNameBuff, 256);
    wsprintf(wcpBuff, L"");
    wsprintf(wcpBuff, L"■GetModuleFileName = %ls\n", wcpGetModuleFileNameBuff);
    outputfile << wcpBuff;


 上記のプログラムを追加すると、test.txtファイルにプログラムファイル名が記述されます。アタッチするとよいでしょう。自分はDLLのプログラムを作ったことないし、サンプルもまだ入手したことないです、アタッチのやり方は知らないので、よくわからないですけど、ここまで分かってたら、きっとうまく行きます。


 今回のサンプルだとregsvr32に登録して使うタイプだとなっているので、コマンドプロンプトで「regsvr32 DeskbandSDKSample.dll」で登録すると以下のようなメッセージが受け取れます。管理者権限のコマンドプロンプトである必要があります。dllのあるディレクトリパスもちゃんと合わせないと駄目ですよ。カレントディレクトリを移動するか、パス付きでdll名を指定するかですね。


 ■GetModuleFileName = C:\WINDOWS\SysWOW64\regsvr32.exe


 そうすると、これは間違いなくregsvr32から呼び出されてますね。


 この場合、以下のような手順で、デバッグ作業が始められます。

1.Visual Studio 起動アイコンを右クリックして管理者として実行。プロジェクトを開く

2.プロジェクトのプロパティダイアログを開く

左の領域のTreeでDebugを選択する。
コマンド = C:\WINDOWS\SysWOW64\regsvr32.exe
コマンド引数 = $(OutDir)$(TargetName)$(TargetExt)
作業ディレクトリ = $(OutDir)
その他の設定は規定値でいいよ。

3.デバッグ実行


  VC PlusPlusに戻る